package burubaka.bat;

import java.util.logging.Logger;

import burubaka.BurubakaConstants;
import burubaka.model.PreRaceInfo;
import burubaka.model.RaceInfo;
import burubaka.service.PreRaceInfoService;
import burubaka.service.RaceCardHorseService;
import burubaka.service.RaceInfoService;

public class RaceStartBat {

	private static final Logger log = Logger.getLogger(RaceStartBat.class.getName());

	private RaceInfoService raceInfoService = new RaceInfoService();
	// private NominationHorseService nominationHorseService = new
	// NominationHorseService();
	private PreRaceInfoService preRaceInfoService = new PreRaceInfoService();
	private RaceCardHorseService raceCardHorseService = new RaceCardHorseService();

	public RaceInfo execute() throws Exception {
		// 事前レース情報取得
		PreRaceInfo preRaceInfo = preRaceInfoService.find();
		if (preRaceInfo == null) {
			return null;
		}

		String raceName = preRaceInfo.getRaceName();
		log.info("raceName:" + raceName);

		RaceInfo oldRaceInfo = raceInfoService.getCurrentRaceInfo();

		// すでにレース情報が登録されているかどうか、レース名で判断
		// すでに登録されている場合は何もしない
		if (oldRaceInfo != null && oldRaceInfo.getRaceName().indexOf(raceName) >= 0) {
			return null;
		}

		// // 進捗状況が終了でない場合は処理を行わない
		// if (oldRaceInfo != null && oldRaceInfo.getProgress() !=
		// BurubakaConstants.PROGRESS_END) {
		// log.info("まだ終了していません");
		// return;
		// }

		// まだ今回のレース情報が公開されていない場合は何もしない
		RaceInfo raceInfo = raceInfoService.getRaceInfo(preRaceInfo);
		if (raceInfo == null) {
			log.info("レース情報が取得できませんでした");
			return null;
		}

		// レース情報が登録されている場合は現在フラグをoffにする
		if (oldRaceInfo != null) {
			// レース情報登録
			oldRaceInfo.setCurrentFlg(BurubakaConstants.FLAG_OFF);
			oldRaceInfo = raceInfoService.regist(oldRaceInfo);
			// 登録馬、本登録馬削除
			// nominationHorseService.deleteAll(raceInfo);
			raceCardHorseService.deleteAll(oldRaceInfo);
		}

		// レース情報登録
		raceInfo.setDistrictClass(preRaceInfo.getDistrictClass());
		raceInfo.setProgress(BurubakaConstants.PROGRESS_NOMINATION);
		raceInfo.setCurrentFlg(BurubakaConstants.FLAG_ON);
		raceInfo = raceInfoService.regist(raceInfo);

		// プレ情報更新
		preRaceInfo.setExecFlag(BurubakaConstants.FLAG_ON);
		preRaceInfoService.regist(preRaceInfo);
		// 予備登録馬登録
		// List<NominationHorse> nhList =
		// nominationHorseService.getNominationHorseList(null, text);
		// nominationHorseService.regist(nhList, raceInfo);
		return raceInfo;
	}
}
